home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / archivers / xfd / developer / sources / asm / unknown2.a < prev    next >
Text File  |  1999-06-14  |  5KB  |  257 lines

  1. * Programmheader
  2. *
  3. *    Name:        Unknown2
  4. *    Author:        SDI
  5. *    Distribution:    PD
  6. *    Description:    XFD external decruncher for Unknown Cruncher 2
  7. *    Compileropts:    -
  8. *    Linkeropts:    -
  9. *
  10. * 1.0   19.01.99 : first version
  11.  
  12.         INCLUDE    "AINCLUDE:IncDirs.i"
  13.         INCLUDE    "lvo.i"
  14.  
  15.         INCLUDE    "libraries/xfdmaster.i"
  16.         INCLUDE "exec/memory.i"
  17.  
  18.         * head function for tests
  19. *        INCLUDE    "xfdExeHead.a"
  20.  
  21. ForeMan        MOVEQ    #-1,D0
  22.         RTS
  23.  
  24.         DC.L    XFDF_ID
  25.         DC.W    1,0
  26.         DC.L    0,0,Slave1
  27.  
  28.         DC.B    "$VER: Unknown2 1.0 (19.01.1999) by SDI",0
  29. N_Unknown2    DC.B    'Unknown Cruncher 2',0
  30.         EVEN
  31.  
  32. Slave1        DC.L    0        ;no more slaves
  33.         DC.W    2        ;version
  34.         DC.W    36        ;master version
  35.         DC.L    N_Unknown2    ;name
  36.         DC.W    XFDPFF_ADDR    ;flags
  37.         DC.W    0
  38.         DC.L    RB_Unknown2    ;recog buffer
  39.         DC.L    DB_Unknown2    ;decrunch buffer
  40.         DC.L    0        ;recog segment
  41.         DC.L    0        ;decrunch segment
  42.         DC.W    0,0
  43.         DC.L    $68        ;MinBufSize
  44.  
  45. *************************************************************************
  46. *    Recog buffer function: receives buffer + length in A0/D0    *
  47. *************************************************************************
  48.  
  49. RB_Unknown2    MOVEQ    #0,D0            ; False
  50.  
  51.         CMP.L    #$014B47FA,$2C(A0)
  52.         BNE.B    .No
  53.         CMP.L    #$1600E80B,$3C(A0)
  54.         BNE.B    .No
  55.         CMP.L    #$1A802449,$50(A0)
  56.         BNE.B    .No
  57.         CMP.L    #$D3D8D1D8,$54(A0)
  58.         BNE.B    .No
  59.         CMP.L    #$E21767F4,$64(A0)
  60.         BNE.B    .No
  61.         MOVEQ    #1,D0            ; True
  62. .No        RTS
  63.  
  64. *************************************************************************
  65. *    Decrunch buffer function: receives xfdbiBufferInfo in A0    *
  66. *************************************************************************
  67.  
  68. DB_Unknown2    MOVEM.L    A4-A6,-(A7)
  69.         MOVE.L    A0,A5
  70.  
  71.         MOVEA.L    xfdbi_SourceBuffer(A5),A4
  72.  
  73.         MOVE.L    $1BA(A4),D0
  74.         MOVE.L    D0,xfdbi_TargetBufSaveLen(A5)
  75.         MOVE.L    D0,xfdbi_TargetBufLen(A5)
  76.         MOVE.L    xfdbi_TargetBufMemType(A5),D1
  77.         MOVE.L    xfdm_ExecBase(A6),A6
  78.         JSR    _LVOAllocMem(A6)
  79.         MOVE.W    #XFDERR_NOMEMORY,xfdbi_Error(A5)
  80.         MOVE.L    D0,xfdbi_TargetBuffer(A5)
  81.         BEQ.B    .NoMem
  82.  
  83.         MOVE.L    $26(A4),xfdbi_DecrAddress(A5)
  84.         MOVE.L    $18C(A4),xfdbi_JmpAddress(A5)
  85.  
  86.         MOVEM.L    D2-D7/A2-A6,-(A7)
  87.         LEA.L    $1B6(A4),A0
  88.         MOVEQ    #0,D1
  89.         MOVE.B    (A0)+,D1
  90.         MOVEA.L    D1,A6        * num 4
  91.         MOVE.B    (A0)+,D1
  92.         MOVEA.L    D1,A5        * num 3
  93.         MOVE.B    (A0)+,D1
  94.         MOVEA.L    D1,A4        * num 2
  95.         MOVE.B    (A0)+,D1
  96.         MOVE.L    D1,D3
  97.         LSR.B    #4,D3
  98.         ANDI.B    #$F,D1        * num 1
  99.         MOVEA.L    D0,A1        * dest buffer
  100.         MOVEA.L    D0,A2
  101.         ADDA.L    (A0)+,A1    * dest buffer end
  102.         ADDA.L    (A0)+,A0    * source buffer end
  103.         BSR.B    Decrunch
  104.         MOVEM.L    (A7)+,D2-D7/A2-A6
  105.  
  106.         CLR.W    xfdbi_Error(A5)
  107.  
  108.         MOVEQ    #1,D0
  109. .NoMem        MOVEM.L    (A7)+,A4-A6
  110.         RTS
  111.  
  112. *************************************************************************
  113. *    decrunch routine - copied from file (a bit modified)        *
  114. *************************************************************************
  115.  
  116. Decrunch    
  117. L_3C        MOVE.B    -(A0),D7
  118.         LEA    Sub(PC),A3
  119.         BEQ.B    L_3C
  120.         MOVE    #$10,CCR
  121. L_44        ROXR.B    #1,D7
  122.         BEQ.B    L_3C
  123.         BCC.B    L_44
  124.         MOVEQ    #0,D2
  125. L_4C        LSR.W    #1,D2
  126.         BCS.B    L_B4
  127.         MOVEQ    #1,D6
  128.         JSR     (A3)
  129.         BEQ.B    L_B4
  130.         MOVEQ    #1,D6
  131.         JSR     (A3)
  132.         BEQ.B    L_A6
  133.         MOVEQ    #2,D6
  134.         JSR     (A3)
  135.         CMPI.B    #3,D5
  136.         BEQ.B    L_6A
  137.         ADDQ.W    #1,D5
  138.         BRA.B    L_A6
  139. L_6A        MOVEQ    #2,D6
  140.         JSR     (A3)
  141.         CMPI.B    #3,D5
  142.         BEQ.B    L_78
  143.         ADDQ.W    #4,D5
  144.         BRA.B    L_A6
  145. L_78        MOVEQ    #3,D6
  146.         JSR     (A3)
  147.         CMPI.B    #7,D5
  148.         BEQ.B    L_88
  149.         ADDQ.W    #7,D5
  150.         BRA.B    L_A6
  151. L_88        MOVE.L    A5,D4    *****
  152.         MOVE.L    #$10E,D2
  153.         BTST    #2,D3
  154.         BNE.B    L_9E
  155.         MOVEQ    #1,D6
  156.         JSR     (A3)
  157.         BNE.B    L_A0
  158.         MOVEQ    #8,D4
  159. L_9E        MOVEQ    #$E,D2
  160. L_A0        MOVE.W    D4,D6
  161.         JSR     (A3)
  162.         ADD.L    D2,D5
  163. L_A6        MOVE.W    D5,D4
  164. L_A8        MOVE.B    -(A0),-(A1)
  165.         DBRA    D4,L_A8
  166.         MOVEQ    #1,D2
  167.         BRA.W    L_164
  168. L_B4        MOVEQ    #1,D6
  169.         JSR     (A3)
  170.         BNE.B    L_D2
  171.         MOVEQ    #8,D6
  172.         JSR     (A3)
  173.         MOVEQ    #2,D4
  174. L_C0        ADD.L    D4,D5
  175.         SUBQ.W    #1,D4
  176. L_C4        MOVE.B    -1(A1,D5.L),-(A1)
  177.         DBRA    D4,L_C4
  178.         MOVEQ    #0,D2
  179.         BRA.W    L_164
  180. L_D2        MOVEQ    #2,D6
  181.         JSR     (A3)
  182.         CMPI.B    #3,D5
  183.         BEQ.B    L_114
  184.         ADDQ.W    #3,D5
  185. L_DE        MOVE.L    D5,D4
  186.         MOVEQ    #1,D6
  187.         JSR     (A3)
  188.         BNE.B    L_EC
  189.         MOVEQ    #6,D6
  190.         JSR     (A3)
  191.         BRA.B    L_C0
  192. L_EC        MOVE.L    A4,D6    *****
  193.         BTST    #0,D3
  194.         BEQ.B    L_FC
  195.         MOVEQ    #1,D6
  196.         JSR     (A3)
  197.         BNE.B    L_106
  198.         MOVEQ    #8,D6
  199. L_FC        JSR     (A3)
  200.         ADDI.L    #$40,D5
  201.         BRA.B    L_C0
  202. L_106        MOVE.L    A4,D6    *****
  203.         JSR     (A3)
  204.         ADDI.L    #$140,D5
  205.         BRA.B    L_C0
  206. L_114        MOVEQ    #3,D6
  207.         JSR     (A3)
  208.         CMPI.B    #7,D5
  209.         BEQ.B    L_122
  210.         ADDQ.W    #6,D5
  211.         BRA.B    L_DE
  212. L_122        MOVEQ    #1,D6
  213.         JSR     (A3)
  214.         BNE.B    L_156
  215.         MOVEQ    #7,D4
  216.         MOVEQ    #5,D2
  217.         BTST    #1,D3
  218.         BNE.B    L_13E
  219.         MOVEQ    #1,D6
  220.         JSR     (A3)
  221.         BNE.B    L_140
  222.         MOVE.L    #$85,D2
  223. L_13E        MOVE.L    A6,D4    *****
  224. L_140        MOVE.W    D4,D6
  225.         JSR     (A3)
  226.         ADD.L    D2,D5
  227.         MOVE.L    D5,D4
  228.         MOVEQ    #8,D6
  229.         JSR     (A3)
  230. L_14C        MOVE.B    D5,-(A1)
  231.         SUBQ.L    #1,D4
  232.         BNE.B    L_14C
  233.         MOVEQ    #0,D2
  234.         BRA.B    L_164
  235. L_156        MOVE.L    D1,D6    *****
  236.         JSR     (A3)
  237.         ADDI.L    #$D,D5
  238.         BRA.W    L_DE
  239. L_164        CMPA.L    A2,A1
  240.         BGT.W    L_4C
  241.         RTS
  242.  
  243. Sub        MOVEQ    #0,D5
  244.         ANDI.W    #$FF,D6
  245.         SUBQ.W    #1,D6
  246. .S1        LSR.B    #1,D7
  247.         BEQ.B    .S3
  248. .S2        ROXL.L    #1,D5
  249.         DBRA    D6,.S1
  250.         TST.B    D5
  251.         RTS    
  252. .S3        MOVE.B    -(A0),D7
  253.         MOVE    #$10,CCR
  254.         ROXR.B    #1,D7
  255.         BRA.B    .S2
  256.         END
  257.